//
//  CZStatusModel.swift
//  git
//
//  Created by 徐 鹏超 on 16/4/10.
//  Copyright © 2016年 徐 鹏飞. All rights reserved.
//

import UIKit

class CZStatusModel: NSObject {
    ///created_at	string	微博创建时间
    var created_string: String?
    var created_at: String?{
            didSet{
                created_string = dealCreaete(created_at)
            }

    }
    /// id	int64	微博ID
    var id: Int = 0
    ///text	string	微博信息内容
    var text: String?
    /// source	string	微博来源
    var source: String?{
        didSet{
            source_string = getSource(source)
        }
    }
    var source_string: String?
    
    /// user	object	微博作者的用户信息字段 详细
    var user: CZStatusUser?
    
    ///reposts_count	int	转发数
    var reposts_count: Int = 0
    ///comments_count	int	评论数
    var comments_count: Int = 0
    ///attitudes_count	int	表态数
    var attitudes_count: Int = 0
    
    ///retweeted_status	object	被转发的原微博信息字段，当该微博为转发微博时返回 详细
    var retweeted_status: CZStatusModel?
    
    var pic_urls: [CZPictureModel]?

    init(dic: [ String : NSObject ]) {
        super.init()
        
        setValuesForKeysWithDictionary(dic)
        // 在这里获取 retweeted_status 的字典
        if let retweetedDic = dic["retweeted_status"] as? [String: NSObject]{
            retweeted_status = CZStatusModel(dic: retweetedDic)
        }
        // 先获取 pics 字典
        if let picsDic = dic["pic_urls"] as? [[String:NSObject]]{
            pic_urls = [CZPictureModel]()
            
            for pic in picsDic{
                let model = CZPictureModel(dic: pic)
                
                pic_urls?.append(model)
            }
            
        }
        
        //在这里获取 user 字典
        guard let userDic = dic["user"] as? [String: NSObject] else{
            return
        }
        user = CZStatusUser(dic: userDic)
        
    }
    //  防止崩溃 实现 forUndefinedKey
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
    }
    
    //MARK:-- 获取来源的子字符串
    func getSource(souce: String?) ->String{
        
        guard let souce = souce else {
            return ""
        }
        
        let subArray = souce.componentsSeparatedByString(">")
        
        if subArray.count >= 2{
            
            let secondStr = subArray[1].componentsSeparatedByString("<")
            
            return secondStr[0]
        }else {
            return ""
        }
        
    }
    // 时间的处理
    /*
    1.需要把时间转换成标准时间(2016-04-12 16:27:40)
    
    2.转换成标准时间之后,我们需要依靠 日历 来比较
    
    */
    func dealCreaete(creaet_at: String?) -> String?{
        
        guard let creaet_at = creaet_at else {
            return ""
        }
        
        // 1. 创建一个  NSDateFormatter
        let formatter = NSDateFormatter()
        // 1.1 设置一些属性
        // 设置一下时区
        formatter.locale = NSLocale(localeIdentifier: "en_US")
        // 设置时间格式-- 字符串的时间格式
        /*
        D: 不能代表 日,容易出错
        设置日期格式 （声明字符串里面每个数字和单词的含义）
        E：星期
        M: 月份
        d：日
        H: 24小时
        m: 分
        s: 秒
        y: 年
        Z: 时区(Zone)
        Mon Jul 12 17:38:17 +0800 2010
        */
        formatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
        // 2. 获取时间 -> 将字符串转换成 标准时间
        let date = formatter.dateFromString(creaet_at)
        
        /*
        如果是今年
        
        是今天
        
        1分钟之内 显示 "刚刚"
        
        1小时之内 显示 "xx分钟前"
        
        其他 显示 "xx小时前"
        
        是昨天 显示 "昨天 HH:mm"
        
        其他 显示 "MM-dd HH:mm"
        
        不是今年 显示 "yyyy-MM-dd"
        
        2016
        04
        12
        16
        */
        
        // 获取日历 -- 日历可以帮助我们去比较 年/月/日/时/分/秒
        // 1. 先获取一下日历
        let calendar = NSCalendar.currentCalendar()
        // 2. 让日历比较日期的那些属性 -> 年/月/日/时/分/秒
        let units = NSCalendarUnit(arrayLiteral: .Year,.Month,.Day,.Hour,.Minute)
        // 3. 让这2个时间进行比较,比较完成之后,会返回一个 比较结果
        // 如果比较了 年, comps.year 是一个差值.比较的差值
        // 举例:fromDate.Year = 2015
        //      toDate.Year = 2016
        //          comps.year = 1
        let comps = calendar.components(units, fromDate: date!, toDate: NSDate(), options: [])
        
        if comps.year == 0{ // 今年
            
            // 判断月份
            if comps.month == 0{ // 这个月
                // 判断天
                if comps.day == 0{ // 今天
                    
                    if comps.hour == 0 {
                        
                        if comps.minute == 0{
                            
                            
                            
                            return "刚刚"
                        } else {
                            
                            // 测试数据
                            // 1.修改 formatter.dateFormat = ""
                            formatter.dateFormat = "HH:mm"
                            // 2. 把时间转换成字符串 -- 注意: 这个时间是标准时间 yyyy-MM-dd HH:mm:ss
                            let dateStr = formatter.stringFromDate(date!)
//                            return "今天 \(dateStr)"
                            
                            return "\(comps.minute)分钟之前"
                        }
                        
                    }else {
                        
                    }
                    
                }else if comps.day == 1 { // 昨天
                    // 是昨天 显示 "昨天 HH:mm"
                    
                    // 获取 HH:mm 或者 "yyyy-MM-dd" 我们可以通过标准时间转换
                    // 1.修改 formatter.dateFormat = ""
                    formatter.dateFormat = "HH:mm"
                    // "yyyy-MM-dd"
                    // 2. 把时间转换成字符串 -- 注意: 这个时间是标准时间 yyyy-MM-dd HH:mm:ss
                    let dateStr = formatter.stringFromDate(date!)
                    return "昨天 \(dateStr)"
                    
                }else {
                    
                }
                
            }else {
                
            }
            
        } else {
            
        }
        
        
        return date?.description
        
    }

    
    
}
